<?php
namespace Admin\Controller;
use Common\Controller\PublicController;
//角色控制器
class RoleController extends PublicController
{
	//角色列表
	public function roleList(){
		$role=M("Role");
		//定义where查询条件
		$where=array();//where初始为空数组
		//判断是否有查询条件
		if(IS_POST){
			$post=I("post.where");
			$where['role_name']=array('like',"%{$post}%");
		}

		//分页
		// 查询满足要求的总记录数
		$count=$role
			->where($where)
			->count();
		// 实例化分页类 传入总记录数和每页显示的记录数
		$page=new \Think\Page($count,10);
		//配置分页显示规则
		$page->rollPage=1;
		$page->lastSuffix = false;
		$page->setConfig('header','%TOTAL_ROW%条数据 %NOW_PAGE%/%TOTAL_PAGE% 页&nbsp;&nbsp;');
        $page->setConfig('first', '首页');
		$page->setConfig('last', '尾页');
		$page->setConfig('prev','上一页');
		$page->setConfig('next','下一页');
		$page->setConfig('theme',"%HEADER% %FIRST% %UP_PAGE% %DOWN_PAGE% %END%");
		$show=$page->show();//分页显示输出

		//分页跳转的时候保证查询条件
		foreach($where as $key=>$val) {
		    $page->parameter.="$key=".urlencode($val).'&';
		}

		$role_arr=$role->where($where)->order('id')->limit($page->firstRow,$page->listRows)->select();
		$this->assign('post',$post);
		$this->assign('role_arr',$role_arr);
		$this->assign('page',$show);
		$this->display();
	}

/*	//角色添加方法
	public function roleAdd(){
		if(IS_POST){
			$rolename=I('post.rolename');
			//若$rolename不为空，则执行添加
			if($rolename){
				$role=M('Role');
				$data['role_name']=$rolename;
				$res=$role->add($data);
				if($res){
					$this->success("添加成功",U('Role/roleList'));
				}else{
					$this->error("添加失败");
				}
			}
		}else{
			$this->display();
		}

	}*/

	//角色添加方法(ajax)
	public function roleAdd(){
		$rolename=I('post.rolename');
		//若$rolename不为空，则执行添加
		if($rolename){
			$role=M('Role');
			$data['role_name']=$rolename;
			$res=$role->add($data);
			if($res){
				$data['status']=1;
				$data['msg']="添加成功！";
				$this->ajaxReturn($data);
			}else{
				$data['status']=0;
				$data['msg']="添加失败！";
				$this->ajaxReturn($data);
			}
		}
	}
	//角色权限修改方法
	public function roleEdit(){
		$role=M("Role");	
		//获取id，查找think_role表，获取所具有的权限role_auth_ids
		$id=I("get.id");
		/**
		 * getByid 通过id字段查询该条记录，也可通过其他字段查询
		 * 通过id字段查询时等同于find()
		 */
		// $role_arr=$role->getByid($id);
		$role_arr=$role->find($id);
		$role_name=$role_arr['role_name'];//获取角色名
		$role_auth_ids=$role_arr['role_auth_ids'];
		//将权限role_auth_ids拆分为数组
		$auth_ids_arr=explode(",",$role_auth_ids);

		//查询auth表，获得权限列表
		$auth=M('Auth');
		//查询父类及子类
		$authp=$auth->where(array('auth_level'=>0))->select();
		$auths=$auth->where(array('auth_level'=>1))->select();
		$authgs=$auth->where(array('auth_level'=>2))->select();

		$this->assign('id',$id);
		$this->assign('role_name',$role_name);
		$this->assign('auth_ids_arr',$auth_ids_arr);

		$this->assign('authp',$authp);
		$this->assign('auths',$auths);
		$this->assign('authgs',$authgs);
		$this->display();	
	}
	//角色权限修改执行方法
	public function roleEditAction(){
		$id=I('post.id');//获取所修改的角色id
		$post=I('post.auth_ids');//获取权限id数组
		//将数组转换为字符转，准备写入think_role表中的role_auth_ids字段
		$role_auth_ids=implode($post,",");
		/**
		 * 权限修改步骤：
		 * 1.根据post权限id数组，查询think_auth表
		 * 2.获取所对应的控制器auth_c和方法auth_a名称
		 * 3.将auth_c和auth_a拼接成think_role表中role_auth_ac字段对应格式
		 */
		$where['id']=array("in",$post);
		$auth=M('Auth');
		$auth_arr=$auth->where($where)->select();
		//遍历$auth_arr，获取auth_c和auth_a名称
		$auth_ac="";
		foreach($auth_arr as $v){
			//排除auth_level为0时的空控制器和空方法
			if($v['auth_level']){
				//拼接成所需格式
				$auth_ac.=$v['auth_c']."-".$v['auth_a'].",";
			}
		}
		//去除最后的",",得到最终格式
		$role_auth_ac=rtrim($auth_ac,",");
		//写入think_role表，完成修改
		$role=M("Role");
		$data['id']=$id;
		$data['role_auth_ids']=$role_auth_ids;
		$data['role_auth_ac']=$role_auth_ac;

		$res=$role->save($data);
		if($res){
			$da['status']=1;
			$da['msg']="修改成功";
			$this->ajaxReturn($da);
		}else{
			$da['status']=0;
			$da['msg']="未修改";
			$this->ajaxReturn($da);
		}

	}

	//角色删除方法(ajax)
	public function roleDel(){
		//获取id
		$id=I("post.id");
		//判断该角色下是否存在管理员，若存在，则禁止删除
		$admin=M('Admin');
		$arr=$admin->field('id')->getByrole_id($id);
		if($arr){
			$data['status']=0;
			$data['msg']="无法删除：该角色下存在管理员";
			$this->ajaxReturn($data);
		}else{
			$role=M("Role");
			$res=$role->delete($id);
			if($res){
				$data['status']=1;
				$data['msg']="删除成功";
				$this->ajaxReturn($data);
			}else{
				$data['status']=0;
				$data['msg']="删除失败";
				$this->ajaxReturn($data);
			}		
		}
	}




}